package com.alax.interfaces.service;

import com.alax.interfaces.domain.dto.DashboardSummaryDTO;
import com.alax.interfaces.domain.dto.NameValueDTO; // 需要创建这个简单的DTO
import com.alax.interfaces.domain.dto.RealtimeStatsDTO;
import com.alax.interfaces.domain.dto.TimeSeriesDTO; // 需要创建这个DTO

import java.util.List;
import java.util.Map;

/**
 * 仪表盘数据服务接口
 *
 * @author alax
 */
public interface IDashboardService {

    /**
     * 获取仪表盘总览数据
     *
     * @return 总览数据 DTO
     */
    DashboardSummaryDTO getDashboardSummary();

    /**
     * 获取指定天数内的API调用趋势
     *
     * @param days 查询天数
     * @return 时间序列数据 DTO
     */
    TimeSeriesDTO getCallsTrend(int days);

    /**
     * 获取指定时间段内的API调用状态分布
     *
     * @param period 时间段 ("today", "last7days", etc. - 具体逻辑在实现中定义)
     * @return 名称-值 DTO 列表 (e.g., [{"name": "成功", "value": 1000}, {"name": "失败", "value": 50}])
     */
    List<NameValueDTO> getStatusDistribution(String period);

    /**
     * 获取指定时间段内调用次数最多的Top N API
     *
     * @param limit  返回数量
     * @param period 时间段
     * @return 名称-值 DTO 列表 (e.g., [{"name": "API名称", "value": 1500}, ...])
     */
    List<NameValueDTO> getTopApis(int limit, String period);

    /**
     * 获取实时统计数据
     *
     * @return 实时统计数据 DTO
     */
    RealtimeStatsDTO getRealtimeStats();

    /**
     * 获取用户行为统计
     *
     * @param userId 用户ID
     * @param period 时间段
     * @return 用户行为统计数据列表
     */
    List<Map<String, Object>> getUserBehaviorStats(Long userId, String period);
}